inode File system

inode 방식 파일 시스템
파일 시스템 기본 구조
    수퍼 블록: 파일 시스템 정보
    아이노드 블록: 파일 상세 정보
    데이터 블록: 실제 데이터
수퍼블록: 파일 시스템 정보 및 파티션 정보 포함
리눅스: $ df(file system load)

csian@Csianui-MacBookPro ~ % df

Filesystem     512-blocks      Used Available Capacity iused      ifree %iused  Mounted on

/dev/disk3s1s1  478724992  29922624 174930920    15%  553757 2393071203    0%   /

devfs                 402       402         0   100%     696          0  100%   /dev

/dev/disk3s6    478724992   2097192 174930920     2%       1 2393624959    0%   /System/Volumes/VM

/dev/disk3s2    478724992    825000 174930920     1%    1403 2393623557    0%   /System/Volumes/Preboot

/dev/disk3s4    478724992     25728 174930920     1%      56 2393624904    0%   /System/Volumes/Update

/dev/disk1s2      1024000     12328    985192     2%       3    5119997    0%   /System/Volumes/xarts

/dev/disk1s1      1024000     15448    985192     2%      54    5119946    0%   /System/Volumes/iSCPreboot

/dev/disk1s3      1024000      1312    985192     1%      38    5119962    0%   /System/Volumes/Hardware

/dev/disk3s5    478724992 268689768 174930920    61% 2719644 2390905316    0%   /System/Volumes/Data

map auto_home           0         0         0   100%       0          0  100%   /System/Volumes/Data/home

inode와 파일
파일: inode 고유값과 자료구조에 의해 주요 정보 관리
    '파일이름:inode’로 파일 이름은 inode 번호와 매칭
    파일 시스템에서는 inode를 기반으로 파일 엑세스
    inode 기반 메타 데이터 저장(메타 데이터=상세 정보)
inode - Wikiwand  
inode 기반 메타 데이터(파일 권한, 소유자 정보, 파일 사이즈, 생성시간등 시간 관련 정보, 데이터 저장 위치등)
The EXT2 Inode
EXT2 Inode
cat files.txt
cat 명령으로 files.txt를 열면 해당 파일의 inode 번호에 맞은 inode table에 접근
cat에 경우 데이터 블록을 출력하는 명령이기 때문에 inode table에서 Direct blocks의 주소에서
Data 값을 읽어 온다.
ls -al files.txt
(해당 파일의 정보와 권한 상세 정보를 출력)
해당 files.txt의 inode table에 접근해서 table에서 상세 정보를 가져와서 출력
보통 Direct Blocks는 약 12개의 주소를 저장(하나의 Data 블록이 4KB라고 가정해도 48KB 밖에 못 가르킨다.)
이 때 Single indirect, Double indirect, Triple indirect block을 사용한다.
- 2^10 data blocks

Single indirect block은 4KB 크기의 direct block pointers를 포인팅하고 있다.
direct block pointers는 1024개의 data blocks을 가르킬 수 있다.
- 2^10 X 2^10 data blocks

Double indirect block은 4KB 크기의 Single indirect pointers를,
Single indirect pointers는 1024개의 direct block pointers를,
각각의 direct block pointers는 data block을 가르킬 수 있다.


Triple indirect block
- 2^10 X 2^10 X 2^10 data blocks
inode는 작은 파일의 경우 Direct blocks 만을 사용하고, 파일이 커지면 indirect block을 이용해서 큰 파일을 만들 수 있다.
디렉토리 엔트리
리눅스 파일 탐색: ex) -/home/ubuntu/link.txt
1. 각 디렉토리 엔트리(dentry)를 탐색
    각 엔트리는 해당 디렉토리 파일/디렉토리 정보를 가지고 있다.
2. ‘/‘dentry에서 ‘home’을 찾고, ‘home’에서 ‘ubuntu’를 찾고, ‘ubuntu’에서 link.txt 파일 이름에 해당하는 inode를 얻는다.

directory entries (Dentry)
가상 파일 시스템(Virtual File System)
Network등 다양한 기기도 동일한 파일 시스템 인터페이스를 통해 관리 가능
ex) read/write 시스템콜 사용, 각 기기별 read_spec/write_spec 코드 구현(운영체제 내부)
참고) 리눅스(유닉스) 운영체제와 가상 파일 시스템
유닉스에서는 모든 디바이스를 파일 시스템처럼 다룸(VFS)를 통해서 모든 디바이스를 동일하게 사용할 수 있게 함(운영체제)

모든 것은 파일이라는 철학을 따른다.
    모든 인터렉션은 파일을 일고, 쓰는 것처럼 이루어져 있다.
    마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어진다.
    모든 자원에 대한 추상화 인터페이스로 파일 인터페이스를 활용
참고) 특수 파일
디바이스
    블록 디바이스(Block Device)
        HDD, CD/DVD와 같이 블록 또는 섹터 등 정해진 단위로 데이터 전송, IO 송수신 속도가 높음
    캐릭터 디파이스(Character Device)
        키보드, 마우스 등 byte 단위 데이터 전송, IO 송수신 속도가 낮음

    cd/ dev, cat ttyrktkd apr